﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SGCC.Models;
using System.Linq.Expressions;
using System.Linq.Dynamic;
using System.Data.Common;

namespace SGCC.Controllers
{
    public class ObraController : Controller
    {

        public ActionResult Index()
        {
            ViewBag.resultado = new ObraModel().ListarObras();
            return View();
        }


        public ActionResult AdicionarObra()
        {
            return View();
        }

        [HttpPost]
        public ActionResult AdicionarObra(ObraModel obra)
        {
            if (ModelState.IsValid)
            {
                obra.AdicionarObra(obra);
                ViewBag.sucesso = "Obra adicionada com sucesso";
                ModelState.Clear();
            }
            else
            {
                ViewBag.alerta = "Preencha todos os campos obrigatórios*";
            }

            return View();
        }

        public ActionResult Editar(int id)
        {
            ObraModel om = null;

            using (DBContext db = new DBContext())
            {
                Obra o = db.Obra.FirstOrDefault(x => x.ObraId == id);
                om = new ObraModel(o);
            }

            return View(om);
        }

        [HttpPost]
        public ActionResult Editar(ObraModel obra)
        {
            if (ModelState.IsValid)
            {
                using (DBContext db = new DBContext())
                {
                    Obra o = db.Obra.FirstOrDefault(x => x.ObraId == obra.Id);
                    o.ClienteId = obra.clienteId;
                    o.EngenheiroId = obra.engenheiroId;
                    o.ArquitetoId = obra.arquitetoId;
                    o.TipoConstrucaoId = obra.tipoConstrucaoId;
                    o.Logradouro = obra.logradouro;
                    o.CidadeId = obra.cidadeId;
                    o.EstadoId = obra.estadoId;
                    o.Ativo = "S";

                    db.SaveChanges();
                }

                ViewBag.sucesso = "Obra salva com sucesso";
            }
            else
            {
                ViewBag.alerta = "Preencha todos os campos obrigatórios*";
            }

            return View();
        }

        public ActionResult Desativar(int id)
        {

            using (DBContext db = new DBContext())
            {
                Obra o = db.Obra.FirstOrDefault(x => x.ObraId == id);
                o.Ativo = "N";

                db.SaveChanges();
            }

            ViewBag.resultado = new ObraModel().ListarObras();
            return View("index");
        }

        [HttpPost]
        public ActionResult BuscarObra(FiltroObra filtro)
        {
            List<ObraConsulta> consulta = new List<ObraConsulta>();

            using (DBContext db = new DBContext())
            {
                db.Database.Connection.Open();

                DbCommand cmd = db.Database.Connection.CreateCommand();

                cmd.CommandText = "select " +
                                  "o.ObraId, " +
                                  "c.Nome, " +
                                  "cd.Nome, " +
                                  "e.Sigla, " +
                                  "eng.Nome, " +
                                  "arq.Nome, " +
                                  "t.Nome, " +
                                  "o.Logradouro " +
                                  "from Obra o " +
                                  "inner join Cliente c on c.ClienteId = o.ClienteId " +
                                  "inner join Cidade cd on cd.CidadeId = o.CidadeId " +
                                  "inner join Estado e on e.EstadoId = o.EstadoId " +
                                  "inner join Engenheiro eng on eng.EngenheiroId = o.EngenheiroId " +
                                  "inner join Arquiteto arq on arq.ArquitetoId = o.ArquitetoId " +
                                  "inner join TipoConstrucao t on t.TipoConstrucaoId = o.TipoConstrucaoId ";

                string where = string.Empty;


                if (filtro.Cliente > 0)
                {
                    where += string.Format("c.ClienteId = {0}", filtro.Cliente);
                }
                if (filtro.Cidade > 0)
                {
                    if (!string.IsNullOrWhiteSpace(where))
                        where += "and ";

                    where += string.Format("cd.CidadeId = {0}", filtro.Cidade);
                }
                if (filtro.Estado > 0)
                {
                    if (!string.IsNullOrWhiteSpace(where))
                        where += "and ";

                    where += string.Format("e.EstadoId = {0}", filtro.Estado);
                }
                if (filtro.Engenheiro > 0)
                {
                    if (!string.IsNullOrWhiteSpace(where))
                        where += "and ";

                    where += string.Format("eng.EngenheiroId = {0}", filtro.Engenheiro);
                }
                if (filtro.Arquiteto > 0)
                {
                    if (!string.IsNullOrWhiteSpace(where))
                        where += "and ";

                    where += string.Format("arq.ArquitetoId = {0}", filtro.Arquiteto);
                }
                if (filtro.TipoConstrucao > 0)
                {
                    if (!string.IsNullOrWhiteSpace(where))
                        where += "and ";

                    where += string.Format("t.TipoConstrucaoId = {0}", filtro.TipoConstrucao);
                }

                if (!string.IsNullOrWhiteSpace(where))
                    cmd.CommandText += " where " + where;

                DbDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    consulta.Add(new ObraConsulta
                    {
                        Id = Convert.ToInt32(reader[0]),
                        Cliente = reader[1].ToString(),
                        Cidade = reader[2].ToString(),
                        UF = reader[3].ToString(),
                        Engenheiro = reader[4].ToString(),
                        Arquiteto = reader[5].ToString(),
                        TipoConstrucao = reader[6].ToString(),
                        Logradouro = reader[7].ToString()
                    });
                }
            }

            ViewBag.resultado = consulta;

            return View("Index", filtro);
        }
    

    }
}
